// token   前端只要明白 获取 令牌  存储到本地  然后发送给后台 

// token 令牌   

//  生成 token  (加密的 字符串  有时效性   登录发送给前端 )

// Token是服务端生成的一串字符串，以作客户端进行请求的一个令牌，当第一次登录后，服务器生成一个Token便将此Token返回给客户端，以后客户端只需带上这个Token前来请求数据即可，无需再次带上用户名和密码

// https://www.cnblogs.com/lufeiludaima/p/pz20190203.html

// 使用Token的目的：Token的目的是为了减轻服务器的压力，减少频繁的查询数据库，使服务器更加健壮
const jwt = require("jsonwebtoken")

const secret = "wh2008-daydayup";

// Token 加密  
var createToken = function(data) {
    return jwt.sign(data, secret, { expiresIn: '2h' });
}

exports.createToken = createToken

// 解密 token 
var decodeToken = function(token) {
    return new Promise(function(resolve, reject) {
        jwt.verify(token, secret, (err, data) => {
            if (err) {
                reject(err);
            } else {
                resolve(data)

            }
        })
    })
}


// 检查token 是否有效
// 1. token 不存在
// 2. token 过期
// 3. token 不正确 
// code ==3000 表示 token 有问题 登录异常 
exports.checkToken = function(req, res, callback) {
    var token = req.headers.token; // 请求头的token 
    if (token) {
        decodeToken(token)
            .then(data => {
                callback(data)
            })
            .catch(err => {
                res.json({
                    code: 3000,
                    msg: "token无效了,请登陆",
                    type: 0
                })
            })
    } else {
        res.json({
            code: 3000,
            msg: "token不存在,请登陆",
            type: 0
        })
    }
}